#include <bits/stdc++.h>
using namespace std;
const int N=2e5+50;
//in和out分别存进入这个节点和离开这个节点的dfs序
int n,q,u,k,in[N],out[N];
//v存dfs序的节点
vector<int> g[N],v;
void dfs(int u){
    in[u]=v.size();
    v.push_back(u);
    for(int v:g[u]){
        dfs(v);
    }
    out[u]=v.size()-1;
}
int main(void){
    scanf("%d%d",&n,&q);
    for(int i=2;i<=n;i++){
        scanf("%d",&u);
        g[u].push_back(i);
    }
    dfs(1);
    // for(int i=0;i<v.size();i++){
    //     printf("%d ",v[i]);
    // }
    // printf("\n");
    // for(int i=1;i<=n;i++){
    //     printf("%d ",in[i]);
    // }
    // printf("\n");
    // for(int i=1;i<=n;i++){
    //     printf("%d ",out[i]);
    // }
    // printf("\n");
    while(q--){
        scanf("%d%d",&u,&k);
        //进入u的时间戳加上需要用到的u的子节点数大于离开u的时间戳
        if(in[u]+k-1>out[u]){
            printf("-1\n");
        }else{
            printf("%d\n",v[in[u]+k-1]);
        }
    }
}